import * as vscode from 'vscode';
import { ExtensionService } from './services/ExtensionService';
import { InstanceManager } from './services/InstanceManager';


/**
 * 激活SL Preview扩展
 * 
 * 该函数会在VS Code扩展激活时被调用，主要功能包括：
 * 1. 注册'slPreview.show'命令，用于打开SL预览面板
 * 2. 监听活动编辑器变化事件，当打开.sl文件时自动显示预览面板
 * 
 * @param context - VS Code扩展上下文，用于管理扩展生命周期和订阅
 */
export function activate(context: vscode.ExtensionContext) {
    console.log('SL Preview extension activated');
    ExtensionService.CreateInstance(context);

    console.log('workspacefolders:', vscode.workspace.workspaceFolders);


    let disposable = vscode.commands.registerCommand('sl-viewer.show', (uri) => {
        console.log('打开SL预览面板');

        if (uri) {
            vscode.workspace.openTextDocument(uri)
                .then(doc => {
                    if (doc) {
                        InstanceManager.OpenInstance(doc);
                    } else {
                        vscode.window.showErrorMessage('打开文档失败');
                    }
                });
        } else {
            vscode.window.showErrorMessage('请先打开一个.sl文件');
        }
    });
    context.subscriptions.push(disposable);

    // 监听活动编辑器变化事件
    // vscode.window.onDidChangeActiveTextEditor(editor => {
    //     console.log('检测到编辑器状态发生变化：', editor?.document.fileName);
    //     if (editor?.document.languageId === 'sl') {
    //         InstanceManager.OpenInstance(editor.document);
    //     }
    // });


    // 当文档保存时，聚焦webview 为当前 光标 位置
    vscode.workspace.onDidSaveTextDocument(doc => {
        if (doc === vscode.window.activeTextEditor?.document) {
            console.log('活动文档被保存:', doc.fileName);

            if (doc.languageId === 'sl') {
                console.log('故事线文档被保存');

                if (!InstanceManager.Exists(doc)) {
                    // console.log('文档未打开，新建预览');
                    // InstanceManager.OpenInstance(doc);
                } else {
                    console.log('文档已打开');
                    InstanceManager.OpenInstance(doc).Refresh();
                }
            }
        }
    });

}

